package com.mxnavi.naviserver;

import com.mxnavi.naviserver.CAvoidArea;
import com.mxnavi.naviserver.CNaviPoi;
import com.mxnavi.naviserver.CNaviDestPoiInfo;
import com.mxnavi.naviserver.INaviLocMsgListener;
import com.mxnavi.naviserver.INaviHUDMsgListener;


/**
* 导航服务类接口
* @version 1.1
*/
interface INaviService{
	
	/**
	* 地理信息逆解码
	* <p> 根据经纬度，得到街道名称等信息 <br> 
	* @param longitude 经度 
	* @param latitude 纬度
	* @param cs 回调参数，导航利用此参数将位置信息回传给client端
	*/
	void requestLocationMessage(double longitude, double latitude, INaviLocMsgListener cs);
	
	
	/**
	* HUD 信息
	* <p> 客户端请求hud相关信息 <br>
	* <p> 信息包括方向，道路，经纬度，到下一引导点距离，是否模拟导航 <br> 
	* @param cs 类型：INaviHUDMsgListener
	* cs 为客户端实现的对象
	* server端，会将HUD 相关信息，通过cs传递给客户端
	*/
	void startHUDMessage(INaviHUDMsgListener cs);
	
	
	/**
	* HUD 信息
	* <p> 客户端停止请求hud相关信息 <br>
	* @param cs 类型: INaviHUDMsgListener
	* 对应startHUDMessage传递的参数（必须是同一个实例）
	*/
	void stopHUDMessage(INaviHUDMsgListener cs);
	
	
	/**
	* 地图控制接口
	* <p> 包括地图放大/缩小，视角切换（2D，3D，北上） <br> 
	* @param requestCode 请求码
	* @param action 动作请求
	* @return 0 成功, 非0 失败
	* @see CNaviCommon 
	*/
	int setMapControl(int action);
	
	
	/**
	* 设置信息 <br>
	* <p> 包括设置家/公司  <br> 
	* 备注：此接口以后可能会扩展，添加设置途径地 <br>
	* 设置方式，只能一个一个设置
	* @param type 类型
	* type: NAVI_FAVORITE_TYPE_HOME 家
	* type: NAVI_FAVORITE_TYPE_COMPANY 公司 
	* @param poi 家/公司 信息
	* @return 0 成功, 非0 失败
	* @see CNaviPoi CNaviCommon
	*/
	int setFavorite(int type, in CNaviPoi poi);
	
	
	/**
	* 获取信息 <br>
	* <p> 获取 家/公司 信息  <br> 
	* 备注：此接口以后可能会扩展，获取途径地 <br>
	* 返回列表，是为了以后获取途径地时使用方便，目前每次请求，只会返回一个信息（家/公司）
	* @param type 类型
	* type: NAVI_FAVORITE_TYPE_HOME 家
	* type: NAVI_FAVORITE_TYPE_WORK 公司 
	* @return List<CNaviPoi> 家/公司 信息
	* @see CNaviPoi
	*/
	List<CNaviPoi> getFavorite(int type);
	
	
	/**
	* 目的地管理相关接口
	* <p> 目的地管理为一组相关接口，包括增删改查 <br>
	*/
	
	/**
	* 请求/查看 目的地列表 
	* @return List<CNaviDestPoiInfo> 目的地列表
	* @see CNaviDestPoiInfo
	*/
	List<CNaviDestPoiInfo> getNaviDestList();
	
	
	/**
	* 请求/查看 目的地列表 
	* @param list 目的地列表信息
	* @return 0 成功, 非0 失败
	* @see CNaviDestPoiInfo
	*/
	int setNaviDestList(in List<CNaviDestPoiInfo> list);
	
	
	/**
	* 设置 回避区域/道路 
	* @param avoidArea 回避区域/道路
	* @return 0 成功, 非0 失败
	* @see CAvoidArea
	*/
	int setNaviAvoidArea(in CAvoidArea avoidArea);
	
	
	/**
	* 设置 导航 方言类型
	* @param type 方言类型
	* type 取值如下：
    *    具体取值参考CNaviPoi
	* @return 0 成功, 非0 失败
	*/
	int setNaviPronunciationType(int type);
	
	int getNaviPronunciationType();
	
	/**
	* 设置 导航动画效果开关 
	* @param on 开关
	* on 取值如下：
	* 0 : 关
	* 1 : 开
	* @return 0 成功, 非0 失败
	*/
	int setNaviAnimationOn(int on);
	
	
	/**
	* 设置 导航交通台提示开关 
	* @param on 开关
	* on 取值如下：
	* 0 : 关
	* 1 : 开
	* @return 0 成功, 非0 失败
	*/
	int setNaviTrafficProgramOn(int on);
	
	
	/**
	* 设置 导航地图配色 
	* @param type 配色方案
	* type 取值如下：
	* 1 : 第一套配色
	* 2 : 第二套配色
	* @return 0 成功, 非0 失败
	*/
	int setNaviMapColorPlan(int type);
	
	
	/**
	* 设置 导航地图文字
	* @param size 文字大小
	* type 取值如下：
	* 1 : 小号字体
	* 2 : 中号字体
	* 3 : 大好字体
	* @return 0 成功, 非0 失败
	*/
	int setNaviFontSize(int size);
	
	/**
	 *  设置静音
	 *  @param isMute true-静音 
	 */
	void setMute(boolean isMute); 
	/**
	 * 是否静音
	 */
	boolean isMute();
	
	/**
	 * 设置播报内容Level
	 * @param level 0-简洁 1-正常 2-详细
	 */
	void setVoiceBroadcastLevel(int level);
	/**
	 * 获取播报level
	 * @return  0-简洁 1-正常 2-详细
	 */
	int getVoiceBroadcastLevel();
	
	/**
	 * 设置默认算路条件
	 * @param clacCondition
	 * type 取值如下
	 * 0-推荐  1-高速 2-最短 3-经济
	 */
	void setDefaultClacCondition(int calcCondition);
	/**
	 * 获取默认算路条件
	 * @return
	 * 0-推荐  1-高速 2-最短 3-经济
	 */
	int getDefaultClacCondition();
	
	/**
	  * 设置地图昼夜色变化模式
	    @param 1
	    type 取值如下
	  *  PC_VIEW_COLORMODE_DAY = 1;
	  *  PC_VIEW_COLORMODE_NIGHT = 2;
	     PC_VIEW_COLORMODE_LINKAGE_SEASON = 3;    // 自动模式（根据时区）
	     PC_VIEW_COLORMODE_LINKAGE_TIME_SEG = 4; // 自动模式（根据时间）
	    @param 2
	    type 取值如下
	  例如:String param =  {
	"enColorMode":	4,
	"startTime":	{
		"ucHour":	12,
		"ucMinute":	0,
		"ucSecond":	0
	},
	"endTime":	{
		"ucHour":	13,
		"ucMinute":	0,
		"ucSecond":	0
	}
}
	    注意: 只有enColorMode = 4时 startTime及endTime才有意义
	  * @return 0 成功, 非0 失败
	  */
	int setViewColorMode(String param);
	
	/**
	 * 获取当前地图昼夜色
	 * @return 
	  例如: {
	"enColorMode":	4,
	"startTime":	{
		"ucHour":	12,
		"ucMinute":	0,
		"ucSecond":	0
	},
	"endTime":	{
		"ucHour":	13,
		"ucMinute":	0,
		"ucSecond":	0
	}
}
     注意: 只有enColorMode = 4时 startTime及endTime才有意义
	 */
	String getViewColorMode();
	/**
	 * 获取导航数据版本号
	 * @return 导航数据版本号
	 */
	String getMxNaviDataVersion();
   /**
	 * 获取导航软件版本号
	 * @return 导航软件版本号
	 */
	String getMxNaviSoftVersion();
}
